package com.fangs.kotlin_banner.adapter

import android.view.View
import android.view.ViewGroup
import androidx.viewpager.widget.PagerAdapter
import com.fangs.kotlin_banner.banner.Banner
import java.util.ArrayList

class BannerViewAdapter(
    list: List<View>?
) :
    PagerAdapter() {
    private var listBean: List<View>? = null
    private var onClicked: OnClicked? = null
    fun setDataList(list: List<View>?) {
        listBean = list
    }

    //数量
    override fun getCount(): Int {
        return listBean!!.size
    }

    //判断是否是否为同一张图片（ui），这里返回方法中的两个参数做比较就可以
    override fun isViewFromObject(view: View, `object`: Any): Boolean {
        return view === `object`
    }

    //设置viewpage内部东西的方法，如果viewpage内没有子控件 滑动产生不了动画效果
    override fun instantiateItem(container: ViewGroup, position: Int): Any {
        val view = listBean!![position]
        view.setOnClickListener { v: View? ->
            if (onClicked != null) {
                // 此处 针对Banner中setDataList循环数组将首尾各加一条数据情况 将角标做对应处理
                val p =
                    if (listBean!!.size == 1) position else if (position == 0) listBean!!.size - 3 else if (position == listBean!!.size - 1) 0 else position - 1
                onClicked!!.onItemClicked(p)
            }
        }
        container.addView(view)
        return view
    }

    //因为它默认是看三张图片，第四张图片的时候就会报错，还有就是不要返回父类的作用
    override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
        container.removeView(`object` as View)
    }

    //刷新ViewPager时缓存页面默认是不会刷新的， 只有将PagerAdapter的getItemPosition方法,
    // 返回值改为POSITION_NONE时才会刷新， 但是如果都改为POSITION_NONE的话，那开销有点大
    override fun getItemPosition(`object`: Any): Int {
        return POSITION_NONE
    }

    init {
        var list = list
        if (list == null) {
            list = ArrayList()
        }
        setDataList(list)
    }

    fun setOnClicked(clicked: OnClicked) {
        onClicked = clicked
    }

    interface OnClicked {
        fun onItemClicked(positions: Int)
    }
}